package org.wzh.spring.di.demo4;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.wzh.spring.di.demo1.CompactDisc;

/**
 * 自动装配就是让Spring自动满足bean依赖的一中方法,在满足依赖的过程中,会在
 * Spring应用上下文中寻找匹配某个bean需求的其他bean.
 * 为了声明要进行自动装配,我们可以借助Spring的@Autowired注解
 * @author Pear
 *
 */
@Component
public class CDPlayer implements MediaPlayer {
	private CompactDisc cd;

	/**
	 * @Autowired 注解不仅能够用在构造器上,还能用在属性的Setter方法上.
	 * @Autowired 注解可以用在类的任何方法上.
	 * 不管是构造器,Setter方法还是其他的方法,Spring都会尝试满足方法参数上所声明的依赖.
	 * 假如有且只有一个bean匹配依赖需求的话,那么这个bean将会被装配进来.
	 * 如果没有匹配的bean,那么在应用上下文创建的时候,Spring会抛出一个异常.
	 * 为了避免异常的出现,你可以将@Autowired的required属性设置为false.
	 * @param cd
	 */
	@Autowired
	public CDPlayer(CompactDisc cd) {
		this.cd = cd;
	}

	@Override
	public void play() {
		cd.play();
	}

	/**
	 * @return the cd
	 */
	public CompactDisc getCd() {
		return cd;
	}

	/**
	 * @param cd the cd to set
	 */
	public void setCd(CompactDisc cd) {
		this.cd = cd;
	}

}
